package com.rong.creatmodel.singlemodel.lazy;

/**
 * 饿汉式：双重锁判断
 */
public class SingleTonLazyDoubleLock {

    private SingleTonLazyDoubleLock(){

    }

    // 添加volatile能保证多线程情况下线程安全也不会有性能问题：防止指令重排序，保证有序性
    private static volatile SingleTonLazyDoubleLock instance;

    public static SingleTonLazyDoubleLock getInstance(){
        // 第一次判断是否为写操作，读操作直接返回
        if(instance == null){
            // 线程B进入
            synchronized(SingleTonLazyDoubleLock.class){
                // 线程A进入同步方法 创建实例对象后线程B再次进行时instance不为空直接返回
                // 抢到锁后再次判断是否为null
                if (instance == null){
                    instance = new SingleTonLazyDoubleLock();
                }
            }

        }
        return instance;
    }
}
